home *** CD-ROM | disk | FTP | other *** search
/ AMIGA-CD 2 / Amiga-CD - Volume 2.iso / ungepackte_daten / 1994 / 8 / 05 / term-4.0-source.lha / PrintPanel.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-06-26  |  6.6 KB  |  307 lines

  1. /*
  2. **    PrintPanel.c
  3. **
  4. **    Control panel to set options for phonebook printing
  5. **
  6. **    Copyright © 1990-1994 by Olaf `Olsen' Barthel
  7. **        All Rights Reserved
  8. */
  9.  
  10. #include "termGlobal.h"
  11.  
  12. enum    {    GAD_FILE=1, GAD_PLAIN, GAD_USE, GAD_CANCEL, GAD_OPTION };
  13.  
  14. STATIC UBYTE __far    OutputFile[MAX_FILENAME_LENGTH] = "PRT:";
  15. STATIC ULONG        Flags = PRINT_SERIAL | PRINT_MODEM | PRINT_SCREEN | PRINT_TERMINAL | PRINT_USERNAME | PRINT_COMMENT;
  16. STATIC BYTE        Plain = FALSE;
  17.  
  18. VOID __regargs
  19. PrintPanel(struct Window *Window,struct List *PhoneList,LONG Count)
  20. {
  21.     struct LayoutHandle    *Handle;
  22.     BYTE             Result = FALSE;
  23.  
  24.     if(Handle = LT_CreateHandleTags(Window -> WScreen,
  25.         LH_LocaleHook,    &LocaleHook,
  26.     TAG_DONE))
  27.     {
  28.         struct Window    *Window;
  29.         UBYTE         Storage[6];
  30.  
  31.         LT_New(Handle,
  32.             LA_Type,    VERTICAL_KIND,
  33.         TAG_DONE);
  34.         {
  35.             LT_New(Handle,
  36.                 LA_Type,    HORIZONTAL_KIND,
  37.                 LA_LabelID,    MSG_V36_0152,
  38.             TAG_DONE);
  39.             {
  40.                 LT_New(Handle,
  41.                     LA_Type,    VERTICAL_KIND,
  42.                 TAG_DONE);
  43.                 {
  44.                     LONG i;
  45.  
  46.                     for(i = 0 ; i < 6 ; i++)
  47.                     {
  48.                         if(i == 3)
  49.                         {
  50.                             LT_EndGroup(Handle);
  51.  
  52.                             LT_New(Handle,
  53.                                 LA_Type,VERTICAL_KIND,
  54.                             TAG_DONE);
  55.                         }
  56.  
  57.                         if(Flags & (1L << i))
  58.                             Storage[i] = TRUE;
  59.                         else
  60.                             Storage[i] = FALSE;
  61.  
  62.                         LT_New(Handle,
  63.                             LA_Type,    CHECKBOX_KIND,
  64.                             LA_LabelID,    MSG_PRINTPANEL_INCLUDE_SERIAL_GAD + i,
  65.                             LA_ID,        GAD_OPTION + i,
  66.                             LA_BYTE,    &Storage[i],
  67.                         TAG_DONE);
  68.                     }
  69.  
  70.                     LT_EndGroup(Handle);
  71.                 }
  72.  
  73.                 LT_EndGroup(Handle);
  74.             }
  75.  
  76.             LT_New(Handle,
  77.                 LA_Type,    VERTICAL_KIND,
  78.                 LA_LabelID,    MSG_V36_0153,
  79.             TAG_DONE);
  80.             {
  81.                 LT_New(Handle,
  82.                     LA_Type,    STRING_KIND,
  83.                     LA_LabelID,    MSG_PRINTPANEL_OUTPUT_FILE_OR_DEVICE_GAD,
  84.                     LA_ID,        GAD_FILE,
  85.                     LA_STRPTR,    OutputFile,
  86.                     LA_Chars,    30,
  87.                     LAST_Picker,    TRUE,
  88.                     GTST_MaxChars,    MAX_FILENAME_LENGTH - 1,
  89.                 TAG_DONE);
  90.  
  91.                 LT_New(Handle,
  92.                     LA_Type,    CHECKBOX_KIND,
  93.                     LA_LabelID,    MSG_PRINTPANEL_PLAIN_TEXT_GAD,
  94.                     LA_ID,        GAD_PLAIN,
  95.                     LA_BYTE,    &Plain,
  96.                 TAG_DONE);
  97.  
  98.                 LT_EndGroup(Handle);
  99.             }
  100.  
  101.             LT_New(Handle,
  102.                 LA_Type,VERTICAL_KIND,
  103.             TAG_DONE);
  104.             {
  105.                 LT_New(Handle,
  106.                     LA_Type,    XBAR_KIND,
  107.                     LAXB_FullSize,    TRUE,
  108.                 TAG_DONE);
  109.  
  110.                 LT_EndGroup(Handle);
  111.             }
  112.  
  113.             LT_New(Handle,LA_Type,HORIZONTAL_KIND,
  114.                 LAGR_SameSize,    TRUE,
  115.                 LAGR_Spread,    TRUE,
  116.             TAG_DONE);
  117.             {
  118.                 LT_New(Handle,
  119.                     LA_Type,    BUTTON_KIND,
  120.                     LA_LabelID,    MSG_GLOBAL_USE_GAD,
  121.                     LA_ID,        GAD_USE,
  122.                     LABT_ReturnKey,    TRUE,
  123.                     LABT_ExtraFat,    TRUE,
  124.                 TAG_DONE);
  125.  
  126.                 LT_New(Handle,
  127.                     LA_Type,    BUTTON_KIND,
  128.                     LA_LabelID,    MSG_GLOBAL_CANCEL_GAD,
  129.                     LA_ID,        GAD_CANCEL,
  130.                     LABT_EscKey,    TRUE,
  131.                     LABT_ExtraFat,    TRUE,
  132.                 TAG_DONE);
  133.  
  134.                 LT_EndGroup(Handle);
  135.             }
  136.  
  137.             LT_EndGroup(Handle);
  138.         }
  139.  
  140.         if(Window = LT_Layout(Handle,LocaleString(MSG_PRINTPANEL_OUTPUT_OPTIONS_TXT),NULL,0,0,IDCMP_CLOSEWINDOW,0,
  141.             LAWN_HelpHook,        &GuideHook,
  142.             WA_DepthGadget,        TRUE,
  143.             WA_CloseGadget,        TRUE,
  144.             WA_DragBar,        TRUE,
  145.             WA_RMBTrap,        TRUE,
  146.             WA_Activate,        TRUE,
  147.         TAG_DONE))
  148.         {
  149.             struct IntuiMessage    *Message;
  150.             BOOLEAN             Done = FALSE;
  151.             ULONG             MsgClass,
  152.                          MsgQualifier;
  153.             UWORD             MsgCode;
  154.             struct Gadget        *MsgGadget;
  155.  
  156.             GuideContext(CONTEXT_PRINT);
  157.  
  158.             PushWindow(Window);
  159.  
  160.             do
  161.             {
  162.                 if(Wait(PORTMASK(Window -> UserPort) | SIG_BREAK) & SIG_BREAK)
  163.                     break;
  164.  
  165.                 while(Message = (struct IntuiMessage *)GT_GetIMsg(Window -> UserPort))
  166.                 {
  167.                     MsgClass    = Message -> Class;
  168.                     MsgQualifier    = Message -> Qualifier;
  169.                     MsgCode        = Message -> Code;
  170.                     MsgGadget    = (struct Gadget *)Message -> IAddress;
  171.  
  172.                     GT_ReplyIMsg(Message);
  173.  
  174.                     LT_HandleInput(Handle,MsgQualifier,&MsgClass,&MsgCode,&MsgGadget);
  175.  
  176.                     if(MsgClass == IDCMP_CLOSEWINDOW)
  177.                         Done = TRUE;
  178.  
  179.                     if(MsgClass == IDCMP_IDCMPUPDATE && MsgGadget -> GadgetID == GAD_FILE)
  180.                     {
  181.                         UBYTE             DummyBuffer[MAX_FILENAME_LENGTH],
  182.                                     *DummyChar;
  183.                         struct FileRequester    *FileRequest;
  184.  
  185.                         LT_LockWindow(Window);
  186.  
  187.                         SplitFileName(OutputFile,&DummyChar,DummyBuffer);
  188.  
  189.                         if(!DummyChar[0])
  190.                         {
  191.                             DummyBuffer[0] = 0;
  192.  
  193.                             DummyChar = LocaleString(MSG_PRINTPANEL_FILENAME_TXT);
  194.                         }
  195.  
  196.                         if(FileRequest = GetFile(Window,LocaleString(MSG_PRINTPANEL_SELECT_OUTPUT_FILE_TXT),DummyBuffer,DummyChar,DummyBuffer,NULL,FALSE,FALSE,FALSE,LocaleString(MSG_GLOBAL_SELECT_TXT),TRUE))
  197.                         {
  198.                             LT_SetAttributes(Handle,GAD_FILE,
  199.                                 GTST_String,DummyBuffer,
  200.                             TAG_DONE);
  201.  
  202.                             FreeAslRequest(FileRequest);
  203.                         }
  204.  
  205.                         LT_UnlockWindow(Window);
  206.                     }
  207.  
  208.                     if(MsgClass == IDCMP_GADGETUP)
  209.                     {
  210.                         LONG i;
  211.  
  212.                         switch(MsgGadget -> GadgetID)
  213.                         {
  214.                             case GAD_USE:
  215.  
  216.                                 Flags = NULL;
  217.  
  218.                                 for(i = 0 ; i < 6 ; i++)
  219.                                 {
  220.                                     if(Storage[i])
  221.                                         Flags |= (1L << i);
  222.                                 }
  223.  
  224.                                 Result = Done = TRUE;
  225.                                 break;
  226.  
  227.                             case GAD_CANCEL:
  228.  
  229.                                 Done = TRUE;
  230.                                 break;
  231.                         }
  232.                     }
  233.                 }
  234.             }
  235.             while(!Done);
  236.  
  237.             PopWindow();
  238.         }
  239.  
  240.         LT_DeleteHandle(Handle);
  241.     }
  242.  
  243.     if(Result)
  244.     {
  245.         LONG Error = 0;
  246.         BPTR File;
  247.  
  248.         if(File = Open(OutputFile,MODE_NEWFILE))
  249.         {
  250.             struct Window        *ReqWindow;
  251.             struct EasyStruct     Easy;
  252.  
  253.             Easy . es_StructSize    = sizeof(struct EasyStruct);
  254.             Easy . es_Flags        = NULL;
  255.             Easy . es_Title        = (UBYTE *)LocaleString(MSG_TERMAUX_TERM_REQUEST_TXT);
  256.             Easy . es_GadgetFormat    = (UBYTE *)LocaleString(MSG_PRINT_STOP_TXT);
  257.             Easy . es_TextFormat    = (UBYTE *)LocaleString(MSG_PRINT_PRINTING_PHONEBOOK_TXT);
  258.  
  259.             if(ReqWindow = BuildEasyRequest(Window,&Easy,NULL))
  260.             {
  261.                 struct PhoneNode    *TempNode;
  262.                 BYTE             Continue = TRUE;
  263.  
  264.                 if(Count > 0)
  265.                 {
  266.                     for(TempNode = (struct PhoneNode *)PhoneList -> lh_Head ; Continue && TempNode -> VanillaNode . ln_Succ ; TempNode = (struct PhoneNode *)TempNode -> VanillaNode . ln_Succ)
  267.                     {
  268.                         if(TempNode -> Entry -> Count >= 0)
  269.                             Continue = PrintEntry(File,ReqWindow,Plain,&Error,TempNode -> Entry,Flags);
  270.                     }
  271.                 }
  272.                 else
  273.                 {
  274.                     for(TempNode = (struct PhoneNode *)PhoneList -> lh_Head ; Continue && TempNode -> VanillaNode . ln_Succ ; TempNode = (struct PhoneNode *)TempNode -> VanillaNode . ln_Succ)
  275.                         Continue = PrintEntry(File,ReqWindow,Plain,&Error,TempNode -> Entry,Flags);
  276.                 }
  277.  
  278.                 FreeSysRequest(ReqWindow);
  279.             }
  280.  
  281.             Close(File);
  282.  
  283.             if(PathPart(OutputFile) != OutputFile)
  284.             {
  285.                 AddProtection(OutputFile,FIBF_EXECUTE);
  286.  
  287.                 if(Config -> MiscConfig -> CreateIcons)
  288.                     AddIcon(OutputFile,FILETYPE_TEXT,TRUE);
  289.             }
  290.         }
  291.         else
  292.             Error = IoErr();
  293.  
  294.         if(Error)
  295.         {
  296.             STRPTR ErrorString;
  297.  
  298.             if(Fault(Error,"",SharedBuffer,MAX_FILENAME_LENGTH))
  299.                 ErrorString = SharedBuffer;
  300.             else
  301.                 ErrorString = "???";
  302.  
  303.             MyEasyRequest(Window,LocaleString(MSG_PRINT_ERROR_TXT),LocaleString(MSG_GLOBAL_CONTINUE_TXT),Error,ErrorString);
  304.         }
  305.     }
  306. }
  307.